package com.clear.chain.demo.demo1;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * 责任链（数组实现责任链）
 */
public class ServiceHandlerChain {
    private List<ServiceHandler> handlers = new ArrayList<>();

    public void addHandler(ServiceHandler handler) {
        this.handlers.add(handler);
    }

    public ProductInfo execute(ProductInfo productInfo) {
        CompletableFuture[] futures = handlers.stream()
                .map(handler -> handler.handle(productInfo))
                .toArray(CompletableFuture[]::new);
        // 等待所有的异步补全任务处理完成
        CompletableFuture<Void> allOf = CompletableFuture.allOf(futures);
        allOf.join();  // 等待所有异步任务完成
        return productInfo;
    }
}
